Python 24일 완성Day 21pythonintermediate
Python 24일 코스 - Day 21: 테스트 pytest
· 읽기 2분
Day 21: 테스트 pytest
pytest 설치와 첫 테스트
pip install pytest
# calculator.py
def add(a, b):
return a + b
def divide(a, b):
if b == 0:
raise ValueError("0으로 나눌 수 없습니다")
return a / b
# test_calculator.py
from calculator import add, divide
import pytest
def test_add():
assert add(2, 3) == 5
assert add(-1, 1) == 0
assert add(0, 0) == 0
def test_divide():
assert divide(10, 2) == 5.0
assert divide(7, 2) == 3.5
def test_divide_by_zero():
with pytest.raises(ValueError):
divide(10, 0)
테스트 실행
pytest # 전체 테스트
pytest test_calculator.py # 특정 파일
pytest -v # 상세 출력
pytest -k "test_add" # 이름으로 필터링
fixture로 테스트 데이터 준비
import pytest
@pytest.fixture
def sample_users():
return [
{"name": "철수", "age": 25},
{"name": "영희", "age": 30},
{"name": "민수", "age": 22},
]
def test_user_count(sample_users):
assert len(sample_users) == 3
def test_youngest_user(sample_users):
youngest = min(sample_users, key=lambda u: u["age"])
assert youngest["name"] == "민수"
parametrize로 여러 케이스 테스트
@pytest.mark.parametrize("input_val, expected", [
(1, False),
(2, True),
(3, True),
(4, False),
(17, True),
(20, False),
])
def test_is_prime(input_val, expected):
assert is_prime(input_val) == expected
테스트 구조 모범 사례
project/
├── src/
│ ├── calculator.py
│ └── user.py
├── tests/
│ ├── test_calculator.py
│ └── test_user.py
└── pytest.ini
오늘의 연습문제
- 문자열 유틸리티 함수 3개를 만들고 각각 테스트를 작성하세요.
BankAccount 클래스에 대한 테스트를 fixture와 함께 작성하세요.
parametrize를 사용하여 이메일 검증 함수를 다양한 입력으로 테스트하세요.